#ifndef __UART_H
#define __UART_H

#include "main.h"

#ifdef __cplusplus
extern "C" {
#endif
#define UART_MAXLEN 255
enum {
    UART_IDEL = 0,
    UART_BEGIN,
    UART_TRAN,
    UART_UNDEFULT,
};

typedef struct {
    u8 dataBit;
    u8 stopBit;
    u8 parityBit;
    u8 bitSpace;
    u8 totalBit;
    u8 deviation;    
    u16 baudRate;
} UartConfigStr;

typedef struct {
    u8 currentBit;
	u8 lastBit;
    u8 state;
    u8 skipBit;
    u16 lastTimes;
    u8 bitBuf[15]; // 记录接收的一个字节的二进制流
} UartCtrlStr;

typedef struct {
    UartConfigStr config;
    UartCtrlStr ctrl;
    u8 recBuf[256]; // 接收的buf
    u16 recLen; // 接收到的数据长度
} UartStr;

void Uart_Init(void);
void UartReciverOneChar(void);
void Uart_StartCount(void);
uint32_t Uart_GetSpace(void);
void Uart_DealBit(u8 mode);
void Uart_SendByte(u8 val);
void Uart_SendStr(u8 *st, u16 len);
u16 Uart_GetRecLen(void);
void Uart_SetRecLen(u16 len);
u8* Uart_GetRecData(void);
u16 Uart_Printf(const char *fmt, ...);
#ifdef __cplusplus
}
#endif

#endif /* __UART_H */